/* 
    作用： 可以限定对象的属性类型
    语法： ninterface 首字母大写
*/
interface Iperson {
    readonly id:string // 定义属性为只读属性，不可修改
    name: string
    age: number
    sex?: string // 接口里面也可以定义可选属性
}
// 接口赋值需要与定义的相同，否则会报错
let p1: Iperson = {
    id: '10001',
    name: '张三',
    age: 19
}
let p2: Iperson = {
    id: '10002',
    name: '李四',
    age: 18,
    sex: '男'
}

console.log(p1);
console.log(p2);

// 接口限定限定方法：
interface IgirlFriend{
    name: string
    sex: string
    cook(): void // 接口的两种限定方式
    say:() =>void

}
let girl1: IgirlFriend = {
    name: '灵儿',
    sex: '女',
    cook(){
        console.log('做美味的饭菜');
        
    },
    say() {
        console.log('量大管饱');
        
    }
}
console.log(girl1);

interface IboyFriend {
   
    money: number
    cook():void
}

class boy1 implements IboyFriend{
    money: number
    cook():void{
        console.log('会做饭');
        
    }
}


// 一个类可以实现多个接口，这个类要有这些接口的所有的属性和方法
// class 类 implements 接口1，接口2，接口3{  }
class boy2 implements Iperson, IboyFriend {
    id:string // 定义属性为只读属性，不可修改
    name: string
    age: number
    sex?: '男' // 接口里面也可以定义可选属性
    money: 9999999
    cook():void{
        console.log('我是米其林五星大厨');
        
    }
}
let boy3 = new boy2()
boy3.name = '王五';
boy3.id = '123'; // 设置只读属性
boy3.age = 20;
boy3.sex = '男'; // 设置可选属性
boy3.money = 9999999;
console.log(boy3);





export {}